package com.cskaoyan.javase.array.operation6.reverse3;

/**
 * @description: 数组的逆序
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

import java.util.Arrays;

/**
 * 数组的逆序：
 * 颠倒原先数组中元素的顺序
 * i ----> arr.lenth-1-i 这两个下标的元素互换
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = {1, 2, 3, 4, 5};
        //reverse(arr);
        System.out.println(Arrays.toString(arr));
        reverse2(arr);
        System.out.println(Arrays.toString(arr));


    }

    //这个返回值怎么写？ 需要返回一个数组吗？
    //随着引用去操作数组，堆上的数组对象已经被改变了，这个时候不会管了
    public static void reverse(int[] arr) {
        //遍历这个数组
        //遍历走到一半应该停下来，否则又逆置一遍，相当于原数组
        for (int i = 0; i < arr.length / 2; i++) {
            //需要换数组中两个元素的值
            //交换对变量而言，能够直接换吗？
            //不能直接换，因为换一次，有一个变量就被覆盖了
            //所以需要一个中间的变量接收被覆盖的变量
            int temp = arr[i];
            //arr[i]是被覆盖的值，应该写在左边
            arr[i] = arr[arr.length - 1 - i];
            //temp的值赋给arr[arr.length-1-i]
            arr[arr.length - 1 - i] = temp;
        }
    }

    //第二种思路
    public static void reverse2(int[] arr) {
        //遍历数组
        for (int start = 0, end = arr.length - 1; start <= end; start++, end--) {
            //for循环当中每个分号之间都是一个语句，可以写多个赋值，用逗号隔开，灵活使用for循环

            //int a, b, c, d = 10;
            //int a1 = 10,  x = 2;
            //交换两个元素值
            //定义一个临时工
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }
    }
}
